﻿/*
 * Created by SharpDevelop.
 * User: CeCi
 * Date: 23/04/2014
 * Time: 07:41 p.m.
 * 
 * To change this template use Tools | Options | Coding | Edit Standard Headers.
 */
using System;
using System.Data.OleDb;
using System.Data;
using System.Windows.Forms;
using Gestión_UTN.Entities;

namespace Gestión_UTN.daimpl
{
	/// <summary>
	/// Description of inscripciondaimpl.
	/// </summary>
	public class inscripciondaimpl:da.inscripcionda
	{
		public inscripciondaimpl()
		{
		}
		
		public bool SaveInscripcion(DateTime fecha, int alu_dni, int car_id, bool titulo, bool planilla, bool fotos, bool copiaDoc)
		{
			bool ingresada = false;
			
			OleDbConnection conex = null;
			OleDbTransaction trans = null;
			
			try
			{
				conex = util.Conexion.conectarAccess();
				trans = null;
				
				if (null != conex) {
					
					string sql = "INSERT INTO ins_inscripciones(ins_fecha, alu_dni, car_id, ins_titulo, ins_planilla, ins_fotos, ins_copiaDocumento)" +
                    			"VALUES(@fecha, @alu_dni, @car_id, @titulo, @planilla, @fotos, @copiaDocumento)";
					
					OleDbCommand insertar = new OleDbCommand(sql,conex);
					
					conex.Open();
					trans = conex.BeginTransaction();
					
					insertar.Parameters.AddWithValue("@fecha",fecha);
					insertar.Parameters.AddWithValue("@alu_dni",alu_dni);
					insertar.Parameters.AddWithValue("@car_id",car_id);
					insertar.Parameters.AddWithValue("@titulo",titulo);
					insertar.Parameters.AddWithValue("@planilla",planilla);
					insertar.Parameters.AddWithValue("@fotos",fotos);
					insertar.Parameters.AddWithValue("@copiaDocumento",copiaDoc);
					
					insertar.ExecuteNonQuery();
					
					trans.Commit();
					
					ingresada = true;
					
					conex.Close();
				}
				
			} catch (Exception) {
				ingresada = false;
				trans.Rollback();
				conex.Close();
			}
			
			return ingresada;
		}
		
		public bool DeleteInscripcion(DateTime fecha, int alu_dni)
		{
			bool eliminada = false;
			
			OleDbConnection conex = null;
			OleDbTransaction trans = null;
			
			try
			{
				conex = util.Conexion.conectarAccess();
				trans = null;
				
				if (null != conex) {
					
					string sql = "DELETE FROM ins_inscripciones " +
						"WHERE ins_fecha = @fecha AND " +
						"alu_dni = @alu_dni";
					
					OleDbCommand eliminar = new OleDbCommand(sql,conex);
					
					conex.Open();
					
					trans = conex.BeginTransaction();
					
					eliminar.Parameters.AddWithValue("@fecha",fecha);
					eliminar.Parameters.AddWithValue("@alu_dni",alu_dni);
					
					eliminar.ExecuteNonQuery();
					
					trans.Commit();
					
					eliminada = true;
					
					conex.Close();
				}
				
			} catch (Exception) {
				eliminada = false;
				trans.Rollback();
				conex.Close();
			}
			
			return eliminada;
		}
		
		public bool ModifyInscripcion(DateTime fecha_anterior, int alu_dni_anterior, DateTime fecha, int alu_dni, int car_id, bool titulo, bool planilla, bool fotos, bool copiaDoc)
		{
			bool modificada = false;
			
			OleDbConnection conex = null;
			OleDbTransaction trans = null;
			
			try
			{
				conex = util.Conexion.conectarAccess();
				trans = null;
				
				if (null != conex) {
					
					string sql = "UPDATE ins_inscripciones SET ins_fecha = @fecha, alu_dni = @alu_dni, car_id = @car_id, ins_titulo = @titulo, " +
									"ins_planilla = @planilla, ins_fotos = @fotos, ins_copiaDocumento = @copiaDocumento" +
									" WHERE ins_fecha = @fecha_anterior AND alu_dni = @dni_anterior";
					
					OleDbCommand modificar = new OleDbCommand(sql,conex);
					
					conex.Open();
					trans = conex.BeginTransaction();
					
					modificar.Parameters.AddWithValue("@fecha",fecha);
					modificar.Parameters.AddWithValue("@alu_dni",alu_dni);
					modificar.Parameters.AddWithValue("@car_id",car_id);
					modificar.Parameters.AddWithValue("@titulo",titulo);
					modificar.Parameters.AddWithValue("@planilla",planilla);
					modificar.Parameters.AddWithValue("@fotos",fotos);
					modificar.Parameters.AddWithValue("@copiaDocumento",copiaDoc);
					modificar.Parameters.AddWithValue("@fecha_anterior",fecha_anterior);
					modificar.Parameters.AddWithValue("@dni_anterior",alu_dni_anterior);
					
					modificar.ExecuteNonQuery();
					
					trans.Commit();
					
					modificada = true;
					
					conex.Close();
				}
				
			} catch (Exception) {
				modificada = false;
				trans.Rollback();
				conex.Close();
			}
			
			return modificada;
		}
		
		public System.Data.DataTable FindAllInscripciones()
		{
			DataTable tablaInscripciones = null;
			
			OleDbConnection conex = null;
			
			try
			{
				conex = util.Conexion.conectarAccess();
				tablaInscripciones = new DataTable();
				
				if (null != conex) {
					
					string sql = "SELECT ins_fecha, alu_dni, alu_nombre,alu_apellido, car_nombre," +
									"ins_titulo,ins_fotos,ins_planilla, ins_copiaDocumento " +
									"FROM ins_inscripciones ins, alu_alumnos alu, car_carreras car " +
									"WHERE ins.alu_dni = alu.alu_dni AND " +
									"ins.car_id = car.car_id";
					
					 OleDbDataAdapter adaptador = new OleDbDataAdapter(sql, conex);
					 
					 conex.Open();
					 
					 adaptador.Fill(tablaInscripciones);
					
					 conex.Close();
				}
				
			} catch (Exception) {
				
				tablaInscripciones = null;
				conex.Close();
			}
			
			return tablaInscripciones;
		}
		
		public Gestión_UTN.Entities.Inscripcion FindInscripcionByDNI(int alu_dni)
		{
			Inscripcion inscripcion = null;
			
			OleDbConnection conex = null;
			OleDbTransaction trans = null;
			
			try
			{
				conex = util.Conexion.conectarAccess();
				trans = null;
				
				if (null != conex) {
					
					string sql = "SELECT ins_id, ins_fecha, alu_dni, car_id," +
									"ins_titulo,ins_fotos,ins_planilla, ins_copiaDocumento " +
									"FROM ins_inscripciones ins " +
									"WHERE alu_dni = @dni";
					
					OleDbCommand consulta = new OleDbCommand(sql,conex);
					
					conex.Open();
					trans = conex.BeginTransaction();
					 
					consulta.Parameters.AddWithValue("@dni",alu_dni);
					
					OleDbDataReader lector = consulta.ExecuteReader();
					
					while (lector.Read())
					{
						inscripcion = new Inscripcion(Convert.ToInt16(lector[0].ToString()),
						                              Convert.ToDateTime(lector[1].ToString()),
						                              Convert.ToInt16(lector[2].ToString()),
						                              Convert.ToInt16(lector[3].ToString()),
						                              Convert.ToBoolean (lector[4].ToString()),
						                              Convert.ToBoolean (lector[5].ToString()),
						                              Convert.ToBoolean (lector[6].ToString()),
						                              Convert.ToBoolean (lector[7].ToString()));
					}
					
					
					 conex.Close();
				}
				
			} catch (Exception) {
				
				trans.Rollback();
				inscripcion = null;
				conex.Close();
			}
			
			return inscripcion;
		}
		
		public Gestión_UTN.Entities.Inscripcion FindInscripcionById(int id)
		{
			Inscripcion inscripcion = null;
			
			OleDbConnection conex = null;
			OleDbTransaction trans = null;
			
			try
			{
				conex = util.Conexion.conectarAccess();
				trans = null;
				
				if (null != conex) {
					
					string sql = "SELECT ins_id, ins_fecha, alu_dni, car_id," +
									"ins_titulo,ins_fotos,ins_planilla, ins_copiaDocumento " +
									"FROM ins_inscripciones ins " +
									"WHERE ins_id = @id";
					
					OleDbCommand consulta = new OleDbCommand(sql,conex);
					
					conex.Open();
					trans = conex.BeginTransaction();
					 
					consulta.Parameters.AddWithValue("@id",id);
					
					OleDbDataReader lector = consulta.ExecuteReader();
					
					while (lector.Read())
					{
						inscripcion = new Inscripcion(Convert.ToInt16(lector[0].ToString()),
						                              Convert.ToDateTime(lector[1].ToString()),
						                              Convert.ToInt16(lector[2].ToString()),
						                              Convert.ToInt16(lector[3].ToString()),
						                              Convert.ToBoolean (lector[4].ToString()),
						                              Convert.ToBoolean (lector[5].ToString()),
						                              Convert.ToBoolean (lector[6].ToString()),
						                              Convert.ToBoolean (lector[7].ToString()));
					}
					
					
					 conex.Close();
				}
				
			} catch (Exception) {
				
				trans.Rollback();
				inscripcion = null;
				conex.Close();
			}
			
			return inscripcion;
		}
	}
}
